/**
 * 对更多字符编码的 url encode 格式
 * @param {Object} str
 */
export function camSafeUrlEncode(str) {
	return encodeURIComponent(str)
		.replace(/!/g, '%21')
		.replace(/'/g, '%27')
		.replace(/\(/g, '%28')
		.replace(/\)/g, '%29')
		.replace(/\*/g, '%2A')
}

/**
 * 验证文件
 * @param {Object} file
 */
export function validateUploadFile(file) {
	const suffix = file.name.substr(file.name.lastIndexOf('.') + 1)
	if (!/^(docx|doc|pdf)$/.test(suffix)) {
		uni.showToast({
			icon: 'none',
			title: '文件格式错误'
		})
		return false
	}
	if (file.size / 1024 / 1024 > 5) {
		uni.showToast({
			icon: 'none',
			title: '文件不能大于5M'
		})
		return false
	}
	return true
}

/**
 * 上传图片
 * @param {Object} opt
 * @param {Object} filePath 文件路径
 */
export function uploadFile(opt, filePath) {
	return new Promise((resolve, reject) => {
		const url = 'https://' + opt.cosHost
		const formData = {
			key: opt.cosKey,
			policy: opt.policy, // 这个传 policy 的 base64 字符串
			success_action_status: 200,
			'q-sign-algorithm': opt.qSignAlgorithm,
			'q-ak': opt.qAk,
			'q-key-time': opt.qKeyTime,
			'q-signature': opt.qSignature
		}
		// 如果服务端用了临时密钥计算，需要传 x-cos-security-token
		if (opt.securityToken) formData['x-cos-security-token'] = opt.securityToken

		uni.uploadFile({
			url,
			filePath,
			name: 'file',
			formData,
			success: res => {
				if (![200, 204].includes(res.statusCode)) {
					resolve(res)
				} else {
					const fileUrl = url + '/' + camSafeUrlEncode(opt.cosKey).replace(/%2F/g, '/')
					resolve(fileUrl)
				}
			},
			fail: err => {
				reject(err)
			}
		})
	})
}

// px转换成rpx
export function unitConvert(num) {
	const deviceWidth = wx.getSystemInfoSync().windowWidth
	const rpx = (750 / deviceWidth) * Number(num)
	return Math.floor(rpx)
}